package mathematics.square;

public interface Square<I extends Number> {
    /**
     * 计算方形的面积
     *
     * @param side 长
     * @param wide 宽
     * @author 杜伟毅
     * @since 2024/11/5 0005 23:58
     */
    default I area(I side, I wide) {
        return null;
    }

    /**
     * 根据面积计算方形的边长
     *
     * @param area 面积
     * @param side 边
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/6 0006 0:13
     */
    default I areaToSide(I area, I side) {
        return null;
    }

    /**
     * 根据面积计算长方形的长和宽
     *
     * @param area 面积
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/6 0006 0:13
     */
    default I rectangleAreaToSide(I area) {
        return null;
    }


    //-------------------------------------

    /**
     * 计算正方形的周长
     *
     * @param side 边长
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/7 0007 13:59
     */
    default I perimeter(I side) {
        return null;
    }

    /**
     * 计算长方形的周长
     *
     * @param side 长
     * @param wide 宽
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/7 0007 14:01
     */
    default I perimeter(I side, I wide) {
        return null;
    }

    /**
     * 计算正方形的边长
     *
     * @param perimeter 周长
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/8 0008 10:54
     */
    default I perimeterToSide(I perimeter) {
        return null;
    }

    /**
     * 根据周长计算正方形的长
     *
     * @param perimeter 周长
     * @param wide      宽
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/7 0007 14:07
     */
    default I perimeterToSide(I perimeter, I wide) {
        return null;
    }

    /**
     * 根据周长计算长方形的宽
     *
     * @param perimeter 周长
     * @param side      边长
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/7 0007 14:08
     */
    default I perimeterToWide(I perimeter, I side) {
        return null;
    }

    /**
     * 计算平行四边形的面积
     *
     * @param base   底
     * @param height 高
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/17 0017 17:49
     */
    default I parallelogramArea(I base, I height) {
        return null;
    }

    /**
     * 计算梯形的面积
     *
     * @param upBase  上底
     * @param botBase 下底
     * @param height  高
     * @return 对函数返回值的描述
     * @author 杜伟毅
     * @since 2024/11/17 0017 17:50
     */
    default I trapezoidArea(I upBase, I botBase, I height) {
        return null;
    }

}